//高阶函数:本身是个函数，接受 函数作为参数，或者 将函数作为返回值输出
let data =[6000,800,1000,500]
//让数据翻倍
// let newDate = data.map((item)=>item*2) //在map这个函数中接受一个箭头函数作为参数：这就是高阶函数
// 上面的箭头函数，转化为普通函数后为下面的写法
// let newDate = data.map(function (item) {
//     return item*2
// })
// console.log(newDate);//打印的结果是一个数组，数组中的每个数字都进行了翻倍
// 通过原生js实现map
// 方法一
function mapp(arr,fn) {
    let newArr = [] //声明一个空数组
    for(var i = 0;i<arr.length;i++){
        // for循环，遍历数组中的每个元素，并且将其推到新数组中
        newArr.push(fn(arr[i],i,arr))
    }
    return newArr
}
let res = mapp(data,function (item,index,arry) { //调用这个函数，并传递两个参数，一个是数组，一个是函数
    console.log(index);
    console.log(arry);
    return item*2
})
console.log(res )//打印的结果是一个数组，数组中的每个数字都进行了翻倍
// 方法二
function mapp(arr,fn) {
    let newArr = [] //声明一个空数组
    for(var i = 0;i<arr.length;i++){
        // for循环，遍历数组中的每个元素，并且将其推到新数组中
        newArr.push(fn(arr[i],i,arr))
    }
    return newArr
}
Array.prototype.mapp = mapp //将方法添加到数组的原型，这样就可以直接调用这个方法了
let res = data.mapp(data,function (item,index,arry) { //调用这个函数，并传递两个参数，一个是数组，一个是函数
    console.log(index);
    console.log(arry);
    return item*2
})
console.log(res); //打印的结果是一个数组，数组中的每个数字都进行了翻倍